package br.com.cs.controller;

import br.com.cs.exception.DAOException;
import br.com.cs.dao.jdbc.MembroJDBC;
import br.com.cs.exception.PojoException;
import br.com.cs.model.Membro;
import br.com.cs.pojo.impl.MembroPojoImpl;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;
import javax.faces.validator.ValidatorException;

@ManagedBean(name = "membroMB")
@RequestScoped
public class MembroMB extends AbstractController implements Serializable {
    
    private ListDataModel membros;
    private Membro membro;
    private Date data;
    private String filterName;
    private String filterValue;
    private List<Membro> listaMembros = new ArrayList<Membro>();
    
    public MembroMB() {
        membro = new Membro();
    }
    
   // private Membro membro;
    
    public Membro getMembro() {
        return membro;
    }

    public void setMembro(Membro membro) {
        this.membro = membro;
    }
    
    public String salvar() throws PojoException, DAOException{
        
        try {
            if(null != this.membro.getMatricula()){
                MembroPojoImpl.getInstance().save(membro);
                addInfo(null, "Informação! ERRO", "Membro atualizada com sucesso");
                return "formMembro";
            }else{
                MembroJDBC.getInstance().save(membro);
                addInfo(null, "Informação! OK","Membro adicionada com sucesso");
                return "formMembro";
            }
            
            } catch (PojoException e) {
                addError(null, e.getSummaryMessage(), e.getDetailsMessage());
                return "formeMembro";
        }
        
    }
    
    public ListDataModel getMembros() {
        try {
            if (membros != null) {
                return membros;
            } else {
                List membroList = MembroPojoImpl.getInstance().getAll();
                membros = new ListDataModel(membroList);
                return membros;
            }
        } catch (PojoException e) {
            addError(null, e.getSummaryMessage(), e.getDetailsMessage());
            return null;
        }
    }
    public String criarNovo() {
        this.membro = new Membro();
        return "formMembro";
    }

    public String editar() {
        this.membro = (Membro) membros.getRowData();
        return "formMembro";
    }

    public String remover() {
        membro = (Membro) membros.getRowData();
        try {
            MembroPojoImpl.getInstance().delete(membro);
            addInfo(null, "Informação! Visitante removido com sucesso", "notuse");
            membros = null;
            return "listaMembro";
        } catch (PojoException e) {
            addError(null, e.getSummaryMessage(), e.getDetailsMessage());
            return "listaMembro";
        }
    }

    public void validaData(FacesContext context, UIComponent comp,
            Object valor) throws ValidatorException {
        Date cData = (Date) valor;
        if (cData.before(new Date())) {
            throw new ValidatorException(new FacesMessage("Data inválida. Digite uma data maior que o dia de hoje."));
        }
    }

    public String filtrar() {
        try {
            if (this.filterValue == null || "".equals(this.filterValue.trim())) {
                membros = null;
            } else {
                List membrosList = MembroPojoImpl.getInstance().getByFilter(this.filterName.trim(), this.filterValue.trim());
                membros = new ListDataModel(membrosList);
            }
        } catch (PojoException e) {
            addError(null, e.getSummaryMessage(), e.getDetailsMessage());
            return null;
        }
        return "listaMembro";
    }

    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public String getFilterName() {
        return filterName;
    }

    public void setFilterName(String filterName) {
        this.filterName = filterName;
    }

    public String getFilterValue() {
        return filterValue;
    }

    public void setFilterValue(String filterValue) {
        this.filterValue = filterValue;
    }

    public List<Membro> getListaMembros() {
        return listaMembros;
    }

    public void setListaMembros(List<Membro> listaMembros) {
        this.listaMembros = listaMembros;
    }
    
}
